home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Misc / XMLwrapper.h < prev   
C/C++ Source or Header  |  2005-03-14  |  5KB  |  176 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   XML.h - XML wrapper
  5.   Copyright (C) 2003-2005 Nasca Octavian Paul
  6.   Author: Nasca Octavian Paul
  7.  
  8.   This program is free software; you can redistribute it and/or modify
  9.   it under the terms of version 2 of the GNU General Public License 
  10.   as published by the Free Software Foundation.
  11.  
  12.   This program is distributed in the hope that it will be useful,
  13.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.   GNU General Public License (version 2) for more details.
  16.  
  17.   You should have received a copy of the GNU General Public License (version 2)
  18.   along with this program; if not, write to the Free Software Foundation,
  19.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  20.  
  21. */
  22.  
  23. #include <mxml.h>
  24. #ifndef REALTYPE
  25. #define REALTYPE float
  26. #endif
  27.  
  28. #ifndef XML_WRAPPER_H
  29. #define XML_WRAPPER_H
  30.  
  31. #define TMPSTR_SIZE 50
  32.  
  33. //the maxim tree depth
  34. #define STACKSIZE 100
  35.  
  36. class XMLwrapper{
  37.     public:
  38.     XMLwrapper();
  39.     ~XMLwrapper();
  40.     
  41.     /********************************/
  42.     /*         SAVE to XML          */
  43.     /********************************/
  44.  
  45.     //returns 0 if ok or -1 if the file cannot be saved
  46.     int saveXMLfile(char *filename);
  47.  
  48.     //returns the new allocated string that contains the XML data (used for clipboard)
  49.     //the string is NULL terminated
  50.     char *getXMLdata();
  51.     
  52.     //add simple parameter (name and value)
  53.     void addpar(char *name,int val);
  54.     void addparreal(char *name,REALTYPE val);
  55.     
  56.     //add boolean parameter (name and boolean value)
  57.     //if the value is 0 => "yes", else "no"
  58.     void addparbool(char *name,int val);
  59.  
  60.     //add string parameter (name and string)
  61.     void addparstr(char *name,char *val);
  62.  
  63.     //add a branch
  64.     void beginbranch(char *name);
  65.     void beginbranch(char *name, int id);
  66.  
  67.     //this must be called after each branch (nodes that contains child nodes)
  68.     void endbranch();
  69.  
  70.     /********************************/
  71.     /*        LOAD from XML         */
  72.     /********************************/
  73.     
  74.     //returns 0 if ok or -1 if the file cannot be loaded
  75.     int loadXMLfile(const char *filename);
  76.  
  77.     //used by the clipboard
  78.     bool putXMLdata(char *xmldata);
  79.     
  80.     //enter into the branch
  81.     //returns 1 if is ok, or 0 otherwise
  82.     int enterbranch(char *name);
  83.  
  84.         
  85.     //enter into the branch with id
  86.     //returns 1 if is ok, or 0 otherwise
  87.     int enterbranch(char *name, int id);
  88.  
  89.     //exits from a branch
  90.     void exitbranch();
  91.     
  92.     //get the the branch_id and limits it between the min and max
  93.     //if min==max==0, it will not limit it
  94.     //if there isn't any id, will return min
  95.     //this must be called only imediately after enterbranch()
  96.     int getbranchid(int min, int max);
  97.  
  98.     //it returns the parameter and limits it between min and max
  99.     //if min==max==0, it will not limit it
  100.     //if no parameter will be here, the defaultpar will be returned
  101.     int getpar(char *name,int defaultpar,int min,int max);
  102.  
  103.     //the same as getpar, but the limits are 0 and 127
  104.     int getpar127(char *name,int defaultpar);
  105.     
  106.     int getparbool(char *name,int defaultpar);
  107.  
  108.     void getparstr(char *name,char *par,int maxstrlen);
  109.     REALTYPE getparreal(char *name,REALTYPE defaultpar);
  110.     REALTYPE getparreal(char *name,REALTYPE defaultpar,REALTYPE min,REALTYPE max);
  111.  
  112.     bool minimal;//false if all parameters will be stored (used only for clipboard)
  113.     
  114.     struct {
  115.         bool PADsynth_used;
  116.     }information;
  117.     
  118.     //opens a file and parse only the "information" data on it
  119.     //returns "true" if all went ok or "false" on errors
  120.     bool checkfileinformation(char *filename);
  121.     
  122.     private:
  123.     
  124.     int dosavefile(char *filename,int compression,char *xmldata);
  125.     char *doloadfile(const char *filename);
  126.  
  127.     
  128.     mxml_node_t *tree;//all xml data
  129.     mxml_node_t *root;//xml data used by zynaddsubfx
  130.     mxml_node_t *node;//current node
  131.     mxml_node_t *info;//this node is used to store the information about the data
  132.     
  133.     //adds params like this:
  134.     // <name>
  135.     //returns the node
  136.     mxml_node_t *addparams0(char *name);
  137.  
  138.     //adds params like this:
  139.     // <name par1="val1">
  140.     //returns the node
  141.     mxml_node_t *addparams1(char *name,char *par1,char *val1);
  142.  
  143.     //adds params like this:
  144.     // <name par1="val1" par2="val2">
  145.     //returns the node
  146.     mxml_node_t *addparams2(char *name,char *par1,char *val1,char *par2, char *val2);
  147.     
  148.     char *int2str(int x);
  149.     char *real2str(REALTYPE x);
  150.     
  151.     int str2int(const char *str);
  152.     REALTYPE str2real(const char *str);
  153.     
  154.     char tmpstr[TMPSTR_SIZE];    
  155.     
  156.     
  157.     //this is used to store the parents
  158.     mxml_node_t *parentstack[STACKSIZE];
  159.     int stackpos;
  160.  
  161.     
  162.     void push(mxml_node_t *node);
  163.     mxml_node_t *pop();
  164.     mxml_node_t *peek();
  165.  
  166.     //theese are used to store the values
  167.     struct{
  168.         struct {
  169.         int major,minor;
  170.         }xml_version;
  171.     }values;
  172.     
  173. };
  174.  
  175. #endif
  176.